package XZK010104AND001;

/**
 * 选队长游戏训练任务
 * <p>
 * 今天同学们相约一起爬山游玩，为了更好的进行这场活动，大家准备推举
 * 一个人作为出游的临时队长。为了体现合理公平，大家提出了一个比较有趣的
 * 规则。所有人围成一圈，顺序排号。从第一个人开始报数（从 1 到 3 报数），
 * 凡报到 3 的人退出圈子，剩下的人继续报数，最后留下的当选为队长。
 * 请你通过编写程序，求出一组人中的队长是原来第几位同学。
 *
 * @author bing.z 2021/5/27 9:51
 **/
public class Demo {
    public static void main(String[] args) {
        /**
         * 每一轮，幸存者都可以看做往前走了 3 个位置
         * 思路：逆过程，每次向后走 3 个位置
         */
        // 参与人数
        int num = 11;
        // 最终幸存者本轮位置
        int pos = 0;
        for (int i = 2; i <= num; i++) {
            pos = (pos + 3) % i;
        }
        System.out.println("共 " + num + " 人，队长在数组下标 " + pos + " 处");
    }
}
